package com.lagou.server;

import com.lagou.model.Question;

import java.io.*;
import java.util.List;

/**

 * TODO: 编程实现服务器端对学员账户信息的管理

 */
public class ServerQuestionDao {
    /**
     * 合成复用原则
     */
    private final List<Question> questionList;

    /**
     * 自定义构造方法实现成员变量的初始化
     * @param questionList 考题信息集合
     */
    public ServerQuestionDao(List<Question> questionList) {
        this.questionList = questionList;
    }

    /**
     * 自定义成员方法实现将文件中所有考题信息读取到list集合中并返回
     * @return list集合
     * @throws IOException  IO流异常
     * @throws ClassNotFoundException 类型找不到异常
     */
    public List<Question> readQuestionFile() throws IOException, ClassNotFoundException {
        // 判断文件是否存在，只有文件存在且有内容时才需要读取文件中信息
        File file = new File("./question.dat");
        if (file.exists() && file.length() > 48) {
            ObjectInputStream ois = new ObjectInputStream(new FileInputStream(file));
            Object obj = ois.readObject();
            if (obj instanceof List<?>) {
                List<?> list = (List<?>) obj;
                Question question;
                if (list.isEmpty()) {
                    System.out.println("考题数据文件中没有数据！");
                    return questionList;
                }
                for (Object o : list) {
                    if (o instanceof Question) {
                        question = (Question) o;
                        questionList.add(question);
                    }
                }
                System.out.println("读取考题数据成功！");
            } else {
                System.out.println("读取考题数据失败！");
            }
            ois.close();
        }
        return questionList;
    }

    /**
     * 自定义成员方法实现将集合中的所有学员账户信息写入到文件中
     * @throws IOException IO流异常
     */
    public void saveQuestionFile() throws IOException {
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("./question.dat"));
        oos.writeObject(questionList);
        oos.close();
        System.out.println("保存所有考题信息成功");
    }
}
